<?php
require_once("libs/controller.php");
require_once("modelos/personas.php");
require_once("modelos/alcances.php");
require_once("modelos/entidades.php");
require_once("modelos/usuarios.php");
require_once("modelos/adscripciones.php");
require_once("modelos/dependencias.php");
require_once("modelos/organismos.php");
require_once("modelos/paises.php");
require_once("modelos/tiposfuncionarios.php");
require_once("libs/funciones.php");

class UsuarioController extends Controller {
	
	public function __construct() {
		$this->layout = "principal";
		$this->pageTitle = "Escuela Nacional de Fiscales";	
	}
	
	public function index() 
	{
		$this->titleShowed ="Escuela Nacional de Fiscales.- Login";
	}
	
	public function login() 
	{
		try {
			extract($_REQUEST);
			$usuario = new Usuarios();
			$usuario->addCondition("alias", $alias);
			$usuario->addCondition("clave", md5($clave));
			$usuario->doSelectAllWithForeign("personas","id_persona");
			if($usuario->next())
			{
				$id_usuario=$usuario->getValueByPos(0);
				$estatus=$usuario->getValue("estatus");
				$id_nivel_usuario=$usuario->getValue("id_nivel_usuario");
				$id_persona=$usuario->getValue("id");
				$nombres=$usuario->getValue("nombres");
				$apellidos=$usuario->getValue("apellidos");
				$cedula=$usuario->getValue("numero_identificacion");
				LocalUser::setCurrentUser($id_usuario, $id_persona, $alias, $id_nivel_usuario, $nombres, $apellidos, $cedula,"");
				$this->logger->info($alias." ".$id_persona." Inicio de Sesion");
				if(strcmp($id_nivel_usuario,"1")== 0)
				{
					//administrador
					$this->redirect("log/index");
				}
				else if((strcmp($id_nivel_usuario,"2")== 0) || (strcmp($id_nivel_usuario,"3")== 0)|| (strcmp($id_nivel_usuario,"4")== 0))
				{
					if(APP_STATUS == 1)
					{
						//planificador
						$this->redirect("actuaciones/registrar");
					}
					else
					{	
						LocalUser::clearCurrentUser();
						$this->continuar=false;
						$this->showNotificacion("","<br/><br/><br/><br/><br/><br/>".APP_STATUS_MESSAGE,"Aceptar","usuario/index","principal","Escuela Nacional de Fiscales.- Login");
					}
				}
			}
			else
			{
				$_SESSION["msjError"]="Usuario (alias) y/o Contrase&ntilde;a Inv&aacute;lido";
				$this->logger->warn($alias." "." Inicio de Sesion Fallido");
				$this->redirect("usuario/index");
			}
		} catch (Exception $e) {
			$this->logger->error($alias." "." Excepcion en Login: ".$e->getMessage());
			$this->redirect("usuario/index");
		}
	}
	
	public function mantenimiento()
	{
		$this->layout = "principal";
		$this->nivelesPermitidos = array(0,1,2,3);
		LocalUser::clearCurrentUser();
		$this->continuar=false;
		$this->showNotificacion("","<br/><br/><br/><br/><br/><br/>".APP_STATUS_MESSAGE,"Aceptar","usuario/index","principal","Escuela Nacional de Fiscales.- Login");
	}
	
	public function clave()
	{
		$this->layout = "administracion";
		$_SESSION["pestania"] = 4;
		$this->nivelesPermitidos = array(1);
		$this->logger->info(LocalUser::getCurrentUser()->getId()." ".LocalUser::getCurrentUser()->getIdPersona()." usuario->clave");
	}
	
	public function cambiarClave()
	{
		$this->layout = "administracion";
		$_SESSION["pestania"] = 4;
		extract($_REQUEST);
		$this->nivelesPermitidos = array(1);
		$usuario=new Usuarios();
		$usuario->addCondition("id_persona",LocalUser::getCurrentUser()->getIdPersona());
		$usuario->addCondition("id_nivel_usuario","1");
		$usuario->addCondition("clave",md5($claveActual));
		$usuario->doSelectAll();
		if($usuario->next())
		{
			$usuario->setValue("clave",md5($clave));
			$usuario->doUpdate();
			$this->continuar=false;
			$this->showNotificacion("","Clave Cambiada Correctamente","Regresar","usuario/salir","administracion","");
		}
		else
		{
			$this->continuar=false;
			$this->showNotificacion("","Error: Clave Actual Incorrecta","Regresar","usuario/clave","administracion","");
		}
		$this->logger->info(LocalUser::getCurrentUser()->getId()." ".LocalUser::getCurrentUser()->getIdPersona()." usuario->cambiarClave");
	}
	
	public function olvidoclave()
	{
		$this->titleShowed ="Escuela Nacional de Fiscales.- Olvido de Contrase&ntilde;a";
	}
	
	public function recuperar()
	{
		try {
			extract($_REQUEST);
			$persona = new Personas();
			$persona->getConnection()->iniciarTransaccion();
			$persona->addCondition("cedula", $cedula);
			$persona->addCondition("email", $email);
			$persona->doSelectAll();
			if($persona->next()){
				$clave=randomText(8,0);
				$usuario=new Usuarios();
				$usuario->addCondition("id_persona",$persona->getValue("id"));
				$usuario->addCondition("id_nivel_usuario","2");
				$usuario->doSelectAll();
				if($usuario->next())
				{
					$alias=$usuario->getValue("alias");
					$usuario->setValue("clave",md5($clave));
					$usuario->doUpdate();
				}
				$nombreUsuario=$persona->getValue("nombres")." ".$persona->getValue("apellidos");
				$mensajeMail="Sus datos de acceso a nuestro sistema son los siguientes:";
				$html=htmlDatosDeAcceso($nombreUsuario,$mensajeMail,$alias,$clave,0);
				enviarCorreo($email,$nombreUsuario,"Escuela Nacional de Fiscales.- Datos de Acceso",$html);
				$persona->getConnection()->confirmarTransaccion();
				$this->logger->info($cedula." Correo con Datos de acceso enviado a: ".$email);	
				$mensaje="Sus datos de ingreso al sistema han sidos enviados a su Correo Electr&oacute;nico.";
				$this->continuar=false;
				$this->showNotificacion("",$mensaje,"Regresar","usuario/","principal","Escuela Nacional de Fiscales.- Olvido de Contrase&ntilde;a");
			}
			else{
				$this->logger->warn($cedula." "." Datos para recuperacion de usuario incorrectos");
				$mensaje="C&eacute;dula y/o Correo Electr&oacute;nico incorrectos.";
				$this->continuar=false;
				$this->showNotificacion("",$mensaje,"Regresar","usuario/olvidoclave","principal","Escuela Nacional de Fiscales.- Olvido de Contrase&ntilde;a");
			}
		}
		catch (Exception $e) {
			$persona->getConnection()->revertirTransaccion();
			$this->logger->error($cedula." Error al procesar su peticion. Error: ".$e->getMessage());	
			$mensaje="Ha ocurrido un error al procesar su petici&oacute;n. Por favor, intente m&aacute;s tarde.";
			$this->continuar=false;
			$this->showNotificacion("",$mensaje,"Regresar","usuario/olvidoclave","principal","Escuela Nacional de Fiscales.- Olvido de Contrase&ntilde;a");
		}
	}
	
	public function crear() 
	{
		try 
		{
			$this->layout = "administracion";
			$_SESSION["pestania"] = 6;
			extract($_REQUEST);
			$this->nivelesPermitidos = array(1); //administrador
			
			$this->usuarios=new Usuarios();
			$personas=new Personas();
			if(isset($ini_cedula) && isset($cedula))
			{
				$personas->addCondition("tipo_identificacion","C");
				$personas->addCondition("numero_identificacion",$ini_cedula."-".$cedula);
				$personas->doSelectAll();
				if($personas->next())
				{
					$this->idPersona=$personas->getValue("id");	
					$this->cedula=$cedula;
					$this->ini_cedula=$ini_cedula;
					$this->usuarios->addCondition("id_persona",$this->idPersona);
					$this->usuarios->doSelectAll();
				}
				else
				{
					$this->idPersona="";
					$this->cedula=$cedula;
					$this->ini_cedula=$ini_cedula;
					$this->usuarios->addCondition("id_persona","0");
					$this->usuarios->doSelectAll();
				}
			}	
			else
			{
				$this->usuarios->addCondition("id_persona","0");
				$this->usuarios->doSelectAll();	
				$this->idPersona="";
				$this->cedula="";	
				$this->ini_cedula="0";
			}
			
			$this->adscripciones=new Adscripciones();
			$this->adscripciones->doSelectAll();
			$this->dependencias=new Dependencias();
			$this->dependencias->doSelectAll();
			$this->organismos=new Organismos();
			$this->organismos->doSelectAll();
			$this->paises=new Paises();
			$this->paises->doSelectAll();
			$this->entidades=new Entidades();
			$this->entidades->doSelectAll();
			$this->tiposfuncionarios=new Tiposfuncionarios();
			$this->tiposfuncionarios->doSelectAll();
			$this->logger->info(LocalUser::getCurrentUser()->getId()." - ".LocalUser::getCurrentUser()->getAlias()." usuarios->crear");
		} 
		catch (Exception $e) 
		{
			$this->logger->error(LocalUser::getCurrentUser()->getId()." - ".LocalUser::getCurrentUser()->getAlias()."Error en usuarios->crear: ".$e->getMessage());
			$mensaje="Ha ocurrido un error al consultar su informaci&oacute;n. Por favor intente m&aacute;s tarde.";
			$this->continuar=false;
			$this->showNotificacion("",$mensaje,"Regresar","log/","aplicacion","");
		}
	}
	
	public function xAgregarUsuario() 
	{
		try 
		{
			extract($_REQUEST);
			$this->nivelesPermitidos = array(1);//Administrador
			//creacion de objetos modelos
			$persona=new Personas();
			$usuario=new Usuarios();
			//fin creacion
			$persona->getConnection()->iniciarTransaccion();
			
			$persona->addCondition("tipo_identificacion","C");
			$persona->addCondition("numero_identificacion",$ini_cedula."-".$cedula);
			$persona->doSelectAll();
			if($persona->next())
			{
				$idPersona=$persona->getValue("id");
			}
			else
			{	
				$idPersona="";
			}
			$persona->clear();
			if((strcmp($idPersona,"")==0))
			{
				//inicio seteo datos de persona
				$persona->setValue("nombres",$nombres);
				$persona->setValue("apellidos",$apellidos);
				$persona->setValue("genero",$genero);
				$persona->setValue("tipo_identificacion",$tipo_identificacion);
				$persona->setValue("numero_identificacion",$ini_cedula."-".$cedula);
				$persona->setValue("id_organismo",$organismo);
				$persona->setValue("id_adscripcion",$adscripcion);
				$persona->setValue("id_dependencia",$dependencia);
				$persona->setValue("cargo",$cargo);
				$persona->setValue("id_tipo_funcionario",$tipo_funcionario);
				$persona->setValue("id_entidad_federal",$entidad);
				$persona->setValue("email",$email);
				//fin seteo datos persona	
				$persona->doSave();
				$idPersona=$persona->getId();
			}
			else
			{
				//obteniendo persona a editar
				$persona->addCondition("id",$idPersona);
				$persona->doSelectAll();
				$persona->next();
				//inicio seteo datos de participante
				$persona->setValue("nombres",$nombres);
				$persona->setValue("apellidos",$apellidos);
				$persona->setValue("genero",$genero);
				$persona->setValue("tipo_identificacion",$tipo_identificacion);
				$persona->setValue("numero_identificacion",$ini_cedula."-".$cedula);
				$persona->setValue("id_organismo",$organismo);
				$persona->setValue("id_adscripcion",$adscripcion);
				$persona->setValue("id_dependencia",$dependencia);
				$persona->setValue("cargo",$cargo);
				$persona->setValue("id_tipo_funcionario",$tipo_funcionario);
				$persona->setValue("id_entidad_federal",$entidad);
				$persona->setValue("email",$email);
				//fin seteo datos participante	
				$persona->doUpdate();
			}
			
			$clave=randomText(8,0);
			$usuario->setValue("alias",$alias);
			$usuario->setValue("clave",md5($clave));
			$usuario->setValue("estatus","1");
			$usuario->setValue("id_nivel_usuario",$nivel_usuario);
			$usuario->setValue("id_persona",$idPersona);
			$usuario->doSave();

			$nombreUsuario=$nombres." ".$apellidos;
			$mensajeMail="Sus datos de acceso, al Sistema Planificacion de Eventos, son los siguientes:";
			$html=htmlDatosDeAcceso($nombreUsuario,$mensajeMail,$alias,$clave);
			enviarCorreo($email,$nombreUsuario,"Escuela Nacional de Fiscales.- Sistema Planificacion de Eventos",$html);
			$persona->getConnection()->confirmarTransaccion();
			echo '1';
		}
		catch (Exception $e) 
		{
			$persona->getConnection()->revertirTransaccion();		
			$usuario->clear();
			$usuario->addCondition("alias",$alias);
			$usuario->doSelectAll();
			if($usuario->next())
				echo '2';
			else
				echo '0';
		}	
	}
	
	public function xBuscarPersona()
	{
		try {
			extract($_REQUEST);
			$persona = new Personas();
			$persona->addCondition("tipo_identificacion", $tipo);
			$persona->addCondition("numero_identificacion", $numero);
			$persona->doSelectAll();
			if($persona->next())
			{
				$resp="";
				$resp.="'".$persona->getValue("nombres")."',";
				$resp.="'".$persona->getValue("apellidos")."',";
				$resp.="'".$persona->getValue("genero")."',";
				$resp.=$persona->getValue("id_organismo").",";
				$resp.=$persona->getValue("id_adscripcion").",";
				$resp.=$persona->getValue("id_dependencia").",";
				$resp.="'".$persona->getValue("cargo")."',";
				$resp.=$persona->getValue("id_tipo_funcionario").",";
				$resp.=$persona->getValue("id_entidad_federal").",";
				$resp.="'".$persona->getValue("email")."',";
				$resp.=$persona->getValue("id");
				echo "setearCampos(".$resp.");";
			}
			else
			{
				echo "";
			}
		}
		catch (Exception $e) {
			$this->logger->error("Error al consultar persona: ".$e->getMessage());
		}
	}

	public function xBuscarPersona2()
	{
		try {
			extract($_REQUEST);
			$persona = new Personas();
			$persona->addCondition("id", $idPersona);
			$persona->doSelectAll();
			if($persona->next())
			{
				$resp="";
				$resp.="'".$persona->getValue("nombres")."',";
				$resp.="'".$persona->getValue("apellidos")."',";
				$resp.="'".$persona->getValue("genero")."',";
				$resp.=$persona->getValue("id_organismo").",";
				$resp.=$persona->getValue("id_adscripcion").",";
				$resp.=$persona->getValue("id_dependencia").",";
				$resp.="'".$persona->getValue("cargo")."',";
				$resp.=$persona->getValue("id_tipo_funcionario").",";
				$resp.=$persona->getValue("id_entidad_federal").",";
				$resp.="'".$persona->getValue("email")."',";
				$resp.=$persona->getValue("id");
				echo "setearCampos(".$resp.");";
			}
			else
			{
				echo "";
			}
		}
		catch (Exception $e) {
			$this->logger->error("Error al consultar persona: ".$e->getMessage());
		}
	}
	
	public function xEliminarUsuario() 
	{
		try 
		{
			$this->nivelesPermitidos = array(1); //administrador
			extract($_REQUEST);
			//creacion de objetos modelos
			$usuario=new Usuarios();
			
			//eliminando actuacion
			$usuario->doDeleteAll("id",$id,DB_EQUAL);
			echo '1';
		} 
		catch (Exception $e) 
		{
			echo '0';
		}
	}
	
	public function xResetearUsuario() 
	{
		try 
		{
			$this->nivelesPermitidos = array(1); //administrador
			extract($_REQUEST);
			//creacion de objetos modelos
			$usuario=new Usuarios();
			$persona=new Personas();
			
			$usuario->getConnection()->iniciarTransaccion();
			
			$clave=randomText(8,0);
			
			$usuario->addCondition("id",$id);
			$usuario->doSelectAll();
			$usuario->next();
			$idPersona=$usuario->getValue("id_persona");
			$alias=$usuario->getValue("alias");
			
			$usuario->setValue("clave",md5($clave));
			$usuario->doUpdate();

			$persona->addCondition("id",$idPersona);
			$persona->doSelectAll();
			$persona->next();
			$nombreUsuario=$persona->getValue("nombres")." ".$persona->getValue("apellidos");
			$email=$persona->getValue("email");
			
			$mensajeMail="Sus datos de acceso, al Sistema Planificacion de Eventos, son los siguientes:";
			$html=htmlDatosDeAcceso($nombreUsuario,$mensajeMail,$alias,$clave);
			enviarCorreo($email,$nombreUsuario,"Escuela Nacional de Fiscales.- Sistema Planificacion de Eventos",$html);
			$usuario->getConnection()->confirmarTransaccion();
			echo '1';
		} 
		catch (Exception $e) 
		{
			$usuario->getConnection()->revertirTransaccion();
			echo '0';
		}
	}
	
	public function salir()
	{
		LocalUser::clearCurrentUser();
		$this->redirect("index");
	}
}
?>